1. Field of the Invention
This invention relates to offloading particular operations onto a replicate virtual machine in order to minimize the impact of those operations on the original virtual machine.
2. Description of the Related Art
Typically, computers are dedicated to individuals or to specific applications.
For example, an individual owns or is assigned his or her own personal computer (PC). Each time a business hires an employee whose job entails access to a computer, a new PC must be purchased and installed for that new hire. In other cases, a PC or server may be used to perform a specific task. For example, a corporation could have a server for hosting the company's web site, another server for handling emails, and yet another server for handling financial transactions. This one-to-one paradigm is simple, straightforward, flexible, and readily upgradeable. However, one drawback to this set-up is that it is inefficient from a computer resource perspective.
The inefficiency stems from the fact that most software applications do not fully utilize the full processing potential of the computer upon which that software is installed. The processing power of a computer is largely defined by its interconnected hardware components. However, when creating software, programmers do not know the specific hardware capabilities of the computers upon which their software is to be ultimately installed upon. Consequently, programmers tend to be conservative when creating software in order to ensure that software can run on the vast majority of conventional, contemporary PCs or servers. As a result, software applications do not push the envelope set by hardware constraints. Furthermore, some applications may consume a great deal of processing power, while other computer applications are inherently less computing intensive. When the PC or server is running less computationally intensive applications, much of its hardware resources are underutilized. Furthermore, given hundreds or thousands of computers networked in an enterprise, the cumulative effect of the amount of wasted computing resources adds up.
In an effort to take advantage of all the underutilized computing resources, there have been efforts to design “virtual” machines. Basically, a virtual machine entails loading a piece of software onto a physical “host” computer so that more than one user can utilize the resources of that host computer. In other words, the virtual software package is loaded onto one or more physical host computers so that the processing resources of the host computers can be shared amongst many different users. By sharing computing resources, virtual machines make more efficient use of existing computers. Moreover, each user accesses the host computer through his own virtual machine. From the viewpoint of the user, it appears as if he were using his own computer. Users can continue to operate in a manner that they had grown accustomed to in interacting with computers. Thus, rather than buying, installing, and maintaining new computers, companies can simply load virtual machine software to get more leverage off their existing computers. Furthermore, virtual machines do not entail any special training because they run transparent to the user. In addition, virtual machines have the ability to run multiple instances of operating systems—even different operating system—concurrently on the same host or a group of hosts. As one of many examples of the benefits of this, a single user may then run applications on one trusted operating system while safely testing software written to run on a different operating system.
Unfortunately, there is one drawback manifest in exploiting virtual machines to their full potential: Because virtual machines are designed to maximize the most efficient use of the computing resources, there is typically not very much of the spare computing resources left over. Any spare computing resources are often used to host another virtual machine for another user. It is this very economic efficiency which poses serious issues with certain types of applications. Some applications are run infrequently, but when they do execute, these applications are extremely computing intensive. For example, backup applications are often used to backup a company's data. The data is backed up periodically and stored in backup files so that if there happens to be a computer crash or failure, important data is not irretrievably lost. Backing up files is an important function, but it needs to be run only periodically; however, when it does run, it can consume a great deal of computing resources in terms of input/output (I/O) and processing bandwidth. Similarly, data mining and virus scanning applications also fall into the category of applications which are run periodically and which consume an inordinate amount of computer resources when they do execute.
In the past, when dedicated computers had a thick cushion of unused computing resources, these periodic computer resource-intensive applications could execute in the background without disrupting or affecting the user's normal operation. However, with virtual machines, there are typically no spare computing resources to fall back on. Thus, IT administrators are faced with a dilemma: They could run the periodic applications and have the virtual machines suffer a performance hit. However, this is problematic when dealing with mission-critical applications. For example, one would not want to impact the server handling a company's sales orders, even though backing up the sales information is vital. Alternatively, IT administrators could choose to use dedicated computers, but this is wasteful of computing resources.